/**
 * 文件名：ArrivalNoticeService.java
 * 版权：Copyright Lightkit All Rights Reserved.
 * 描述：到货通知业务层
 */
package com.lightkits.wms.domain.arrivalnotice.service;

import com.lightkits.framework.common.model.IResult;
import com.lightkits.wms.domain.arrivalnotice.model.TicketStructureDTO;
import com.lightkits.wms.dto.arrivalnotice.QueryArrivalInfoResponseType;
import com.lightkits.wms.dto.arrivalnotice.QueryArrivalNoticeLineListResponseType;
import com.lightkits.wms.dto.arrivalnotice.QueryArrivalNoticeListResponseType;
import com.lightkits.wms.dto.arrivalnotice.QueryNewArrivalLineResponseType;
import com.lightkits.wms.dto.arrivalnotice.QueryNewSearchResponseType;
import com.lightkits.wms.dto.arrivalnotice.QueryReceiveInfoResponseType;
import com.lightkits.wms.dto.arrivalnotice.model.ArrivalNoticeExecuteServiceDTO;
import com.lightkits.wms.dto.arrivalnotice.model.ArrivalNoticeServiceDTO;
import com.lightkits.wms.dto.arrivalnotice.model.CancelArrivalNoticeServiceDTO;
import com.lightkits.wms.dto.arrivalnotice.model.ExecuteLineServiceDTO;
import com.lightkits.wms.dto.arrivalnotice.model.PrintDTO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


/**
 * @author jie.ao@hand-china.com
 * @create 2019-07-03 11:46
 * @desc
 **/
public interface ArrivalNoticeService {
    /**
     * 查询到货头信息
     * @param ticketNum 到货编号
     * @param organizationName 组织
     * @param partyName 供应商
     * @return response
     */
    QueryArrivalNoticeListResponseType queryArrivalNoticeList(String ticketNum,
                                                              String organizationName,
                                                              String partyName);

    /**
     * 查询到货行信息
     * @param ticketId 到货头id
     * @param partyId 供应商id
     * @return 行信息response
     */
    QueryArrivalNoticeLineListResponseType queryArrivalNoticeLineList(String ticketId,
                                                                      String partyId);

    /**
     * 查询历史到货信息
     * @param itemId 物料id
     * @return 历史到货信息的response
     */
    QueryArrivalInfoResponseType queryArrivalInfo(String itemId);

    /**
     * 查询接收货位
     * @param tickId 到货头id
     * @return 查看接口货位页签
     */
    QueryReceiveInfoResponseType queryReceiveInfo(String tickId);

    /**
     * 查看新增行的信息的LOV
     * @param poNum 采购订单编号
     * @param itemCode 物料code
     * @param planTime 计划到货时间
     * @param planTimeTo 计划到货时间至
     * @return 行信息response
     */
    QueryNewArrivalLineResponseType queryNewArrivalLine(String poNum, String itemCode,
                                                        String planTime, String planTimeTo);

    /**
     * 搜索框数据
     * @param partyId 供应商id
     * @return poNum和itemCode
     */
    QueryNewSearchResponseType queryNewSearchInfo(String partyId);
    /**
     * 保存到货通知
     * @param arrivalNoticeServiceDTO 保存的信息
     * @param insertDTO insertDTO
     * @param modifyDTO modifyDTO
     * @return result
     */
    IResult saveArrivalNotice(ArrivalNoticeServiceDTO arrivalNoticeServiceDTO,
                              TicketStructureDTO insertDTO,
                              TicketStructureDTO modifyDTO);

    /**
     * 执行到货通知list
     * @param serviceDTOList serviceDTOList
     * @return IResult
     */
    IResult executeArrivalNoticeList(List<ArrivalNoticeExecuteServiceDTO> serviceDTOList);

    /**
     * 执行到货通知dto
     * @param serviceDTO 单个请求对象
     * @return IResult
     */
    IResult executeArrivalNotice(ExecuteLineServiceDTO serviceDTO);

    /**
     * 新增到货通知
     * @param insertDTO insertDTO
     * @param modifyDTO modifyDTO
     */
    @Transactional(rollbackFor = Exception.class)
    void insertDate(TicketStructureDTO insertDTO, TicketStructureDTO modifyDTO);

    /**
     * 取消按钮逻辑
     * @param cancelArrivalNoticeServiceDTO 取消信息
     * @return result
     */
    IResult cancelArrivalNotice(CancelArrivalNoticeServiceDTO cancelArrivalNoticeServiceDTO);

    /**
     * 打印到货通知接口
     * @param printDTO printDTO
     * @return result
     */
    IResult printArrivalNotice(PrintDTO printDTO);
}
